NumPy tutorial

NumPy (Numerical Python) je Pythonovská knižnica, ktorá je určená pre prácu s viacrozmernými homogennými poliami.

Ďalšie informácie:

V tomto kurze budeme pracovať výlučne s jednorozmernými poliami.

Modul numpy

Doporučená konvencia pre importovanie modulu numpy:

>>> import numpy as np

Interaktívna dokumentácia

Príklady:

>>> np.info(np.array)
>>> np.array?
>>> np.array*?
>>> np.lookfor('array')

Konštrukcia poľa

Tu sa zoznámime s dvoma základnými spôsobmi konštrukcie poľa typundarray.

Manuálna konštrukcia poľa

Z nejakého kontajneru, napr. zo štandartného pythonovského poľa (list):

>>> A = np.array([0, 1, 2, 3]) # testovacie pole
>>> A
>>> len(A)
>>> type(A)
>>> A.dtype                    # atribút: typ prvkov v poli

Funkcie pre konštrukciu poľa

Funkcia np.linspace vytvorí pole typu ndarray s prvkami, ktoré tvoria homogénne delenie uzavretého intervalu.

>>> np.linspace(0, 10, 100+1) # argumenty: od, do (vrátane), počet prvkov (štandardne 50)
>>> np.linspace(0, 10, 100)   # argumenty: od, do (vrátane), počet prvkov (štandardne 50)

Porovnajte výsledky oboch aplikácií. Čím sa líšia?

Funkcie np.zeros a np.ones vytvoria polia typu ndarray zo samých núl resp. zo samých jednotiek.

>>> np.zeros(10) # argument: dĺžka poľa
>>> np.ones(10)  # argument: dĺžka poľa

Funkcia np.random.randint vytvorí pole typu ndarray z náhodne vygenerovaných čísel.

>>> np.random.randint(1, 100, size=10) # argumenty: od, do (vylučujúce), počet prvkov

Vektorové operácie na poliach

V tejto časti sa zoznámime s funkciami, ktoré umožňujú operovať na poliach typu ndarray po prvkoch. V matematike sa takéto funkcie nazývajú vektorové operácie. V knižnici numpy sa pre ne používa označenie univerzálne funkcie (ufunc).

>>> np.lookfor('ufunc')
>>> np.info('ufunc')

Skalárne operácie

Binárne operácie, kde jeden argument je pole typu ndarray a druhý argument je skalár.

>>> A = np.array([1, 2, 3, 4]) # testovacie pole
>>> A + 2
>>> A - 2
>>> A * 2
>>> A / 2
>>> A ** 2
>>> 2 + A
>>> 2 - A
>>> 2 * A
>>> 2 / A
>>> 2 ** A

Aritmetické operácie

Binárne operácie, kde oba argumenty sú polia typu ndarray.

>>> A = np.array([1, 2, 3, 4]) # testovacie pole
>>> B = np.array([8, 7, 6, 5]) # testovacie pole
>>> A + B
>>> A - B
>>> A * B
>>> A / B
>>> A ** B
>>> A ** 2 + 2 * A + 1
>>> A * A + 2 * A * B + B * B

Porovnávanie

Výsledkom porovnania je boolovské pole typu ndarray. Jeden argument je pole typu ndarray a druhý argument môže byť skalár.

>>> A = np.array([1, 9, 4, 6, 3, 8]) # testovacie pole
>>> A < 5
>>> A % 2 == 0
>>> B = np.array([2, 8, 4, 7, 3, 6]) # iné testovacie pole
>>> A == B
>>> A <= B

Logické operácie

Výrokovologické operácie aplikované na boolovské polia typu ndarray.

>>> A = np.random.randint(1, 100, size=10) # testovacie pole
>>> print(A)
>>> ~(A < 50)                              # negácia
>>> (A < 50) & (A % 2 == 0)                # konjunkcia
>>> (A < 50) | (A % 2 == 0)                # disjunkcia

Maskovanie

Pre rezy na poliach môžme použiť masky. Sú to boolovské polia typu ndarray.

>>> A = np.random.randint(1, 100, size=20) # testovacie pole
>>> print(A)
>>> A[(A < 50) & (A % 2 == 0)]             # extrakcia podpoľa pomocou masky
>>> A[(A < 50) & (A % 2 == 0)] = 222       # priradenie do rezu určeného maskou